package router

import (
	"bluebell/controller"
	"bluebell/logger"
	"bluebell/middlewares"

	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
)

func Setup() *gin.Engine {

	mode := viper.GetString("app.mode")
	if mode == "release" {
		gin.SetMode(gin.ReleaseMode) // 设置成发布模式
	}
	r := gin.New()
	// 注册 pprof相关路由
	//pprof.Register(r)
	// 全网站的接口都会被限流
	//r.Use(middlewares.RateLimitMiddleware(time.Second * 2, 1))

	v1 := r.Group("/api/v1")
	// 权限校验中间件， 是否登录？
	v1.Use(middlewares.JWTAuthMiddleware())

	// 社区接口
	{
		v1.GET("/community", controller.CommunityHandler)
		// 根据社区ID，查找社区详情
		v1.GET("/community/:id", controller.CommunityDetailHandler)

		// 创建帖子
		v1.POST("/post", controller.CreatePostHandler)

		// 帖子详情

		v1.GET("/post/:id", controller.GetPostHandler)

		// 帖子列表
		v1.GET("/postlist/:offset", controller.GetPostListHandler)

		// 根据时间或者分数获取列表 获取帖子列表新版
		v1.GET("/postlistv2/:offset", controller.GetPostListHandlerV2)

		// 根据时间或者分数获取列表 获取帖子列表新版
		v1.GET("/postlistv3/:offset", controller.GetCommunityListHandler)

		// 投票

		v1.POST("/vote", controller.PostVoteHandler)

	}

	r.Use(logger.GinLogger(), logger.GinRecovery(true))

	r.GET("/", func(c *gin.Context) {
		c.String(200, "ok")
	})
	// 用户注册
	r.POST("/signup", controller.SignUpHandler)

	// 用户登录
	r.POST("/login", controller.LogINHandler)

	// 用户权限校验, 使用 JWT校验中间件
	r.GET("/ping", middlewares.JWTAuthMiddleware(), func(c *gin.Context) {
		// 如果是登录用户
		// 判断 token是否可用？

		c.String(200, "pong")
		// 否则返回请登录
		//c.String(200, "请登录！")
	})

	return r

}
